"use client";
import {
claimActivityReward,
ContinuousCfgItem,
ContinuousListItem,
ContinuousResult,
ContinuousRewardItem,
getContinuousRechargeInfo,
} from "@/api/activity";
import CutDown from "@/components/CutDown";
import GlobalNotify from "@/components/ModalPopup/GlobalNotifyModal";
import { ClaimActiveErrorMap } from "@/enums";
import { useRouter } from "@/i18n/routing";
import { formatAmount } from "@/utils/index";
import { Toast } from "antd-mobile";
import BigNumber from "bignumber.js";
import clsx from "clsx";
import { useTranslations } from "next-intl";
import { useSearchParams } from "next/navigation";
import React from "react";
import styles from "./page.module.scss";
interface ListItem {
dayId: number;
data: ContinuousListItem;
}
interface RewardItem {
dayId: number;
data: ContinuousRewardItem[];
}
//"#297fcf"
const DayItem = ({
data,
idx,
onClaim,
onEnd,
}: {
data: ContinuousCfgItem;
idx: number;
onClaim: (data: ContinuousCfgItem) => void;
onEnd?: Function;
}) => {
const dayColor = React.useMemo(() => {
return ["#12940f", "#297fcf", "#ec3920"][idx % 3];
}, [idx]);
const doClaim = () => {
if (onClaim && typeof onClaim === "function") {
onClaim(data);
}
};
return (
{data.id >= 2 && data.isCanClaim && (
)}
{!!data.end_at && (
)}
{data.days}
Recarga contínua por {data.days} dias
Recompensa de login
{data.is_sign === 0 ? "Recebido" : "Receber"}
);
};
const Page = () => {
const t = useTranslations();
const query = Object.fromEntries(useSearchParams());
const [data, setData] = React.useState({} as ContinuousResult);
const router = useRouter();
const dayContainer = React.useRef(null);
const [amount, setAmount] = React.useState({});
const [visible, setVisible] = React.useState(false);
const act = React.useMemo(() => {
if (!data || data.type === 11) return 0;
return 1;
}, [data]);
React.useEffect(() => {
getData();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [query.activity_id]);
const getData = async () => {
const res = await getContinuousRechargeInfo({ activity_id: Number(query.activity_id) });
if (res.code === 200) {
setData(res.data);
}
};
const list = React.useMemo(() => {
if (!data?.list?.list) {
return [];
}
const result: ListItem[] = [] as ListItem[];
Object.keys(data?.list?.list).forEach((key: string) => {
const item = data?.list?.list[key as any];
const key1 = Object.keys(item)[0];
result.push({ dayId: Number(key), data: item[key1 as any] });
});
return result.sort((a, b) => a.dayId - b.dayId);
}, [data?.list?.list]);
const reward_list = React.useMemo(() => {
if (!data?.list?.reward_list) {
return [];
}
const result: RewardItem[] = [] as RewardItem[];
Object.keys(data?.list?.reward_list).forEach((key: string) => {
const item = data?.list?.reward_list[key as any];
const res2: ContinuousRewardItem[] = [];
Object.keys(item).forEach((key2: string) => {
const item2 = item[key2 as any];
res2.push(item2);
});
result.push({ dayId: Number(key), data: res2 });
});
return result;
}, [data?.list?.reward_list]);
const waitList = React.useMemo(() => {
if (!data?.list?.config_list) return [];
const result = [] as ContinuousCfgItem[];
data?.list?.config_list.forEach((item) => {
if (
item.is_sign === 0 ||
item.is_suss === 1 ||
!(item.start_at * 1000 < Date.now() && item.end_at * 1000 > Date.now())
) {
item.isCanClaim = false;
} else {
item.isCanClaim = true;
}
result.push(item);
});
return result.sort((a, b) => a.days - b.days);
}, [data?.list?.config_list]);
const goDeposit = () => {
router.push("/deposit");
};
const doClaim = async (data: ContinuousCfgItem) => {
if (!query.activity_id) {
Toast.show({ content: "Missing activity ID" });
return;
}
if (!data.is_sign) return;
try {
const res = await claimActivityReward({
activity_id: Number(query.activity_id),
id: data.days,
});
if (res.code === 200 && res?.data?.code === 1) {
const amountObj: any = {};
if (res?.data?.reward) {
res?.data?.reward.forEach((item: any) => {
amountObj[`coin_${item.coin_type}`] = formatAmount(item.amount);
});
}
if (res?.data?.extra_reward) {
res?.data?.extra_reward.forEach((item: any) => {
amountObj[`coin_${item.coin_type}`] = formatAmount(
new BigNumber(amountObj[`coin_${item.coin_type}`] || 0)
.plus(item.amount)
.toString()
);
});
}
if (Object.keys(amountObj).length > 0) {
setVisible(true);
setAmount(amountObj);
}
getData();
} else {
throw new Error(ClaimActiveErrorMap.get(res.data.code) || t(`code.400`));
}
} catch (error: any) {
if (error) {
Toast.show({
content: error.message || error.toString(),
maskClickable: false,
});
}
}
};
const doGoLinkActivity = (type: 11 | 13) => {
if (type === data.type || !data.associated_activity_id) return;
router.replace({
pathname: "/rechargeproxy",
query: { activity_id: data.associated_activity_id },
});
};
return (

{act === 0 && (
RECARGA
)}
doGoLinkActivity(11)}
>
Meu login
doGoLinkActivity(13)}
>
Login de amigo
{!!list?.length && (
{list.map((item, idx) => {
return (
recarga
{item.data.pay_num}
Dia {item.dayId}
);
})}
)}
{/* {!!list?.length && (
{list.map((item: any) => {
return (
{item.dayId} dia
{item.dayId}
dia
recarga
{item?.data?.pay_num}
);
})}
)} */}
{!!waitList.length && (
{act === 1 && (
AMIGO ENTRAR PARA
RECEBER CORTESIA
)}
{act === 0 && (
ENTRAR E RECEBER CORTESIA
)}
{waitList.map((item, idx: number) => {
return (
);
})}
)}
Dias de
depósito
Requisitos da
atividade
{data.type === 11 && (
Valor do
bônus
)}
{data.type === 13 && (
Recompensas
de Agente
)}
{reward_list.map((item) => {
return (
Recarga contínua por{" "}
{item.dayId}dias
{item.data.map((item2, idx) => {
return (
Mais de {item2.target_num} por
dia
{item2.target_reward}
);
})}
);
})}
Regras de Atividade
-
Os prémios são reclamados no mesmo dia das 23:00 às
23:50
-
O bônus desta promoção deve ser solicitado dentro do
período promocional. Solicitações feitas após o prazo
serão consideradas como desistência automática.
-
Ao participar desta promoção, você concorda em cumprir
os Termos e Regras da Promoção.
-
Todas as ofertas são liquidadas em reais (BRL - R$) e
seguem o horário oficial de Brasília.
-
Cada jogador, domicílio, endereço, e-mail, número de
telefone, método de pagamento (mesmo cartão de
débito/crédito ou conta bancária) e endereço IP são
utilizados para verificação.
-
Caso seja identificado que qualquer grupo ou indivíduo
esteja abusando dos benefícios oferecidos pela empresa,
esta reserva-se o direito de suspender ou cancelar o
saldo do grupo envolvido.
setVisible(false)}
deraction={5000}
>
);
};
export default Page;